﻿V arhive s igroj jestj nabor fajlov, vida

floors.01 map.01 process.01 resource.01 script.01
floors.02 map.02 process.02 resource.02 script.02
floors.02 map.03 process.03 resource.03 script.03

i tak daleje. Vsego takih naborov fajlov 16. Urovnej v igre tože 16.
Pohože, cto nabor fajlov predstavläjet soboj dannyje urovnä. script.xx fajl jestj dlä urovnä ne vsegda.

Fajly vida process.xx predstavläjut soboj ASCII s zapisämi, pohožimi na kakoj-to sçenarij.
Ocenj pohožimi na process.xx vyglädät fajly script.xx.

Fajly vide resource.xx predstavläjut soboj ASCII s opisanijem resursov urovnä,
perecislenijem tekstur, zvukov, modelej, animaçij.

Vse fajly vida map.xx imejut shodnyj razmer - okolo 157 - 160 kilobajt.
V nacale takih fajlov ocenj mnogo ASCII-simvolov '#', kotoryje inogda preryvajutsä drugimi bajtami.
V každom map.xx fajle jestj blok podobnyh simvolov razmerom v 98304 bajt (0x18000).
Eto pohože na nekuju tabliçu razmerom 256x384 (256x384 == 98304 ).

Pri popytke preobrazovatj dannyje iz nacala map.xx fajla v TGA vyjasnilosj vot cto:
  * Realjnyj razmer massiva v nacale - 256x256.
  * V etom massive soderžitsä cto-to vrode svetovoj karty. Po krajnej mere v nekotoryh bitah.
    Eto vidno po gladkosti izmenäjuscegosä çveta v mestah na urovne, gde jestj fonari.

Po smesceniju 0x10000 v map.xx fajle soderžitsä tože kakaja-to informaçija o svete.
Eto tabliça razmerom 512x64. Plan urovenä rastänut na dva pikselä po gorizontali i sžat na cetyre
pikselä po vertikali.

Po smesceniju 0x18000 v map.xx fajle soderžitsä tabliça 64x64 s razmerov elementa v 11 bajt.
Predpoložiteljno, eto kakije-to dannyje sten.

Bajty 4 i  8 zapisi tabliçy ocenj pohoži na Y koordinatu.
Bajty 6 i 10 zapisi tabliçy ocenj pohoži na X koordinatu.

Pri izucenii redaktora urovnej byli vyjasneny sledujuscije fakty pro steny:
  * Stena možet bytj razmerom 64 ili 128.
  * Steta imejet urovenj "temnoty" ot 0 do 15.
  * Stena imejet dve tocki, svobodno razmescajuscijesä v prostrasnstve.
  * Nesmoträ na otnositeljnuju svobodnostj koordinat, stena priväzyvajetsä k opredelönnoj kletke.
  * Cerez to že menü sten dobavläjutsä monstry, predmety, spawn.
  * Dlä monstrov i predmetov zadajotsä napravlenije.
  * Monstry, vrode, ne zanimajut mesto v kletke. Modeli i predmety zanimajut kletku ili jejo soseda.

Ishodä iz etih faktov, možno scitatj, cto bajty 4, 8, 6, 10 zapisi javläjutsä staršymi v "short" koordinatah tocek steny.
Tojestj, zapisj imejet primernuju strukturu, vida:

#pragma pack(push, 1)
struct WallData
{
	unsigned char unknown[3];
	unsigned char x0_low, x0_height; // Vozmožno, cto eto 1 "short" a ne 2 "unsigned char"
	unsigned char y0_low, y0_height;
	unsigned char x1_low, x1_height;
	unsigned char y1_low, y1_height;
};
#pragma pack(pop)

pole unknown[1] ocenj pohože na "razmer" steny iz redaktora. V nöm pocti vsegda vstrecautsä toljko znacenija 0,64, 128.
pole unknown[0] soderžit nomer tekstury. Po krajnej mere v mladših bitah.
Jesli pole unknown[0] >= 163, ono predstavläjet soboj nomer modeli. Pervaja para koordinat predstavläjet soboj koordianty modeli.
Dlä modelej mladšije 3 bita polä unknown[2] soderžat ugol povorota modeli.

Po smesceniju 0x23000 v map.xx fajle soderžitsä 4 tabliçy razmerom 64x64, ocenj napominajuscije
 strukturu urovnä. Eti tabliçy vyglädät perevörbutymi otnositeljno osi XY.

V pervoj tabliçe (smescenije 0x23000) hranitsä, predpoložiteljno, nomer tektury potolka.
Vo vtoroj tabliçe (smescenijee 0x24000) hranitsä, predpoložiteljno, nomer tekstury pola.

V cetvörtoj tabliçe (smescenije 0x26000) hranitsä cto-to, obsceje dlä çelyh zon urovnej. Ocenj pohože, cto eto karta fonovyh zvukov.

Po smesceniju 0x27001 nahoditsä "unsigned short" s kolicestvom štruktur, razmerom 12 bajt. Zatem sledujet massiv etih struktur.
Pervyje dva "unsigned short" etih struktur ocenj pohoži na koordinaty istocnikov sveta.

Posle etih dannyh idöt "unsigned short" s kolicestvom 8-bajtnyh struktur, a potom massiv etih struktur.
Pervyje dva "unsigned short" etih struktur jestj koordinaty monstrov, a tretij "unsigned short" - id monstra + 100.
